<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise对象(实例)的拓展方法  => 官方定义的方法(Promise对象(实例)使用)
    // then()
    // catch()
    // finally()
    // 用法: p.xxx


    // then(resolveHandler,rejectHandler)  用于指定Promise对象(实例) 状态改变之后要执行的内容(回调函数)  => 返回一个新的Promise对象(链式操作  p.then().then().then())
    // resolveHandler   => 当Promise对象(实例)的状态由pending(进行中) 改为fulfilled(已成功) => 执行此回调函数
    // rejectHandler    => 当Promise对象(实例)的状态由pending(进行中) 改为rejected(已失败) => 执行此回调函数

    // resolveHandler()  rejectHandler()  有一个形参参数,用于接收Promise对象(实例)中存储的数据

    // 可以理解为:then()同步任务 => 先执行 => 提前决定好状态改变之后要执行的内容 => 异步任务执行完毕=>Promise实例状态改变 => 执行既定的回调函数


    // debugger;
    // 执行异步操作 => 根据异步操作的结果改变状态
    var p = new Promise(function (resolve, reject) { // 形参
        // Promise接收一个回调函数 => 容器 => 里面保存着某个未来才会结束的事件（通常是一个异步操作,同步也可以)
        // 此函数属于同步任务 => 调用new Promise()时立即执行
        console.log(111111);
        setTimeout(function () {
            // debugger;
            var num = 0.9;
            console.log(num);
            if (num > 0.5) {
                resolve("不拖堂");  //  {<fulfilled>:不拖堂}
            } else {
                reject("拖堂");  // {<rejected>:拖堂}
            }
            console.log("40:", p);
        }, 2000)

    });
    console.log("44:", p); // {<pending>:undefined} 

    // 用于指定Promise对象(实例) 状态改变之后要执行的内容
    p.then(function (arg) { // 形参
        // debugger;
        console.log("fulfilled", arg);
    }, function (arg) {// 形参
        // debugger;
        console.log("rejected", arg);
    })
</script>

</html>